SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [paEjecutarTransferenciaDeReestructura]

@reestructura INT,
@accion INT,
@tipo INT,
@servicio INT,
@idtransferencia INT

AS

DECLARE @Error INT
SELECT @Error = 0
DECLARE @FechaVigencia DATETIME
SELECT @FechaVigencia = (SELECT FechaVigencia FROM tb_Reestructuras WHERE IdReestructura = @reestructura)

BEGIN TRANSACTION

-- ACCION = 1 Es Alta de Transferencia
IF @accion = 1 BEGIN

	DECLARE @IdTransf INT
	DECLARE @agente INT
	SELECT @agente = (SELECT Agente FROM tb_ServiciosAgentes WHERE IdServicioAgente = @servicio)
	DECLARE @plaza INT
	SELECT @plaza = (SELECT Plaza FROM tb_SubserviciosAgentes WHERE ServicioAgente = @servicio AND Baja = 'N')

	IF NOT EXISTS(SELECT * FROM tb_TransferenciasDeReestructura T INNER JOIN tb_BajasDeTransferencia B ON B.Transferencia = T.IdTransferencia WHERE T.Reestructura = @reestructura AND Agente = @agente AND B.Plaza = @plaza) BEGIN

		INSERT INTO tb_TransferenciasDeReestructura (Reestructura, Tipo, Agente, Estado) VALUES(@reestructura, @tipo, @agente, 12)
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir

		SELECT @IdTransf = @@IDENTITY
	
		INSERT INTO tb_BajasDeTransferencia (Transferencia, Plaza, Estado, TipoBaja) VALUES(@idTransf, @plaza, 12, 12)
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir

		-- Si el tipo es DISPONIBILIDAD (17) debo generar la plaza destino igual a la de origen
		IF @tipo = 17 BEGIN
			DECLARE @IdPlaza INT
			DECLARE @IdDivision INT

			-- Existe una division para Disponibilidad?
			IF EXISTS(SELECT * FROM tb_Divisiones D INNER JOIN tb_Suborganizaciones SO ON D.IdSuborg = SO.IdSuborganizacion INNER JOIN tb_Plazas P ON P.Organizacion = SO.Org WHERE P.IdPlaza = @Plaza AND D.Division = 'N') BEGIN
				SELECT @IdDivision = (SELECT D.IdDivision FROM tb_Divisiones D INNER JOIN tb_Suborganizaciones SO ON D.IdSuborg = SO.IdSuborganizacion INNER JOIN tb_Plazas P ON P.Organizacion = SO.Org WHERE P.IdPlaza = @Plaza AND D.Division = 'N')
			END
			ELSE BEGIN
				INSERT tb_Divisiones
					SELECT '', D.IdSubOrg, D.Descripcion, D.EsGrupo, D.Curso, 'N', D.GrupoCarreras, D.Turno, @FechaVigencia, 'N', Null, P.CUISE, Null, Null
					FROM tb_Plazas P INNER JOIN tb_Divisiones D ON D.IdDivision = P.Division WHERE P.IdPlaza = @Plaza
				SET @Error = @@Error
				IF @Error <> 0 GOTO Salir
				SELECT @IdDivision = @@IDENTITY
			END

			-- Creo la plaza de destino
			INSERT tb_AperturasDeReestructura
				SELECT '', @reestructura, P.Organizacion, P.Suborganizacion, P.Funcion, P.Asignatura, @IdDivision, Null, P.Turno, @FechaVigencia, 1, P.Horas, P.NormaCreacion, 'N', Null, Null,
				P.Sistema, P.RegimenLaboral, P.Financiamiento, P.Presupuesto, P.Finalidad, P.TipoDeFuncion, P.RegimenSalarial, P.RegimenSuplencias, P.RegimenDesigna, 18, P.CargoSalarialDefault, Null, Null, Null, Null, 12, Null
				FROM tb_BajasDeTransferencia BT INNER JOIN tb_Plazas P ON P.IdPlaza = BT.Plaza WHERE Plaza = @Plaza AND Transferencia = @IdTransf
			SET @Error = @@Error
			IF @Error <> 0 GOTO Salir
			SELECT @IdPlaza = @@IDENTITY
			
			INSERT INTO tb_AltasTransferencia (Transferencia, PlazaActual, PlazaFutura, Estado, TipoAlta)
				VALUES(@IdTransf, Null, @IdPlaza, 12, 13)
			SET @Error = @@Error
			IF @Error <> 0 GOTO Salir
		END
	END

END
-- ACCION = 2 Es Baja de Transferencia
IF @accion = 2 BEGIN

	DELETE FROM tb_BajasDeTransferencia WHERE Transferencia = @idtransferencia
	DELETE FROM tb_AperturasDeReestructura WHERE IdAperturaReestructura IN(SELECT PlazaFutura FROM tb_AltasTransferencia A INNER JOIN tb_TransferenciasDeReestructura T ON A.Transferencia = T.IdTransferencia WHERE T.IdTransferencia = @idtransferencia AND T.Tipo = 17)
	DELETE FROM tb_AltasTransferencia WHERE Transferencia = @idtransferencia
	DELETE FROM tb_TransferenciasDeReestructura WHERE IdTransferencia = @idtransferencia
	SET @Error = @@Error
	IF @Error <> 0 GOTO Salir

END
-- ACCION = 3 Es Generar
IF @accion = 3 BEGIN
	
	DECLARE @PlazaACerrar INT
	DECLARE @Agente2 INT

	DECLARE X CURSOR FOR
		SELECT CR.PlazaACerrar, S.Agente
			FROM tb_CierresDeReestructura CR
			INNER JOIN tb_Plazas P ON P.IdPlaza = CR.PlazaACerrar
			INNER JOIN tb_SubserviciosAgentes SS ON SS.Plaza = P.IdPlaza
			INNER JOIN tb_ServiciosAgentes S ON S.IdServicioAgente = SS.ServicioAgente
			WHERE @FechaVigencia >= SS.FechaAlta AND (@FechaVigencia <= SS.FechaBaja OR SS.FechaBaja IS NULL)
			AND S.SituacionRevista IN (1,2) AND CR.Reestructura = @reestructura
			AND NOT EXISTS(SELECT * FROM tb_TransferenciasDeReestructura T INNER JOIN tb_BajasDeTransferencia B ON T.IdTransferencia = B.Transferencia WHERE Reestructura = 6 AND Agente = S.Agente AND B.Plaza = CR.PlazaACerrar)

	OPEN X

	FETCH NEXT FROM X INTO @PlazaACerrar, @Agente2

	WHILE @@FETCH_STATUS = 0 BEGIN

		DECLARE @IdTransferencia2 INT

		INSERT INTO tb_TransferenciasDeReestructura (Reestructura, Agente, Tipo, Estado) VALUES(@reestructura, @agente2, 12, 12)
		SELECT @IdTransferencia2 = @@IDENTITY
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir

		INSERT INTO tb_BajasDeTransferencia (Transferencia, Plaza, TipoBaja, Estado) VALUES(@IdTransferencia2, @PlazaACerrar, 12, 12)
		SET @Error = @@Error
		IF @Error <> 0 GOTO Salir

		FETCH NEXT FROM X INTO @PlazaACerrar, @Agente2
	END

	CLOSE X
	DEALLOCATE X

END

Salir:
IF @Error = 0
	COMMIT TRANSACTION
ELSE
	ROLLBACK TRANSACTION


















GO
GRANT EXECUTE ON  [dbo].[paEjecutarTransferenciaDeReestructura] TO [Reestructura]
GO
